package edu.asselvi.seguros.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import edu.asselvi.seguros.db.ConnectionFactory;
import edu.asselvi.seguros.db.DbUtils;
import edu.asselvi.seguros.exception.ESegurosErros;
import edu.asselvi.seguros.exception.SegurosException;
import edu.asselvi.seguros.pojo.Seguradora;


public class SeguradoraDao extends DbUtils {

	Connection conn = null;

	public SeguradoraDao(Connection conn) {
		this.conn = conn;
	}

	public SeguradoraDao() throws SegurosException {

		this.conn = new ConnectionFactory().getConnection();
	}




	public Seguradora insert(Seguradora seguradora) throws SegurosException {

		String sql = "INSERT INTO SEGURADORAS (ID_SEGURADORA, RAZAO_SOCIAL, CNPJ, EMAIL, TELEFONE, FK_ID_ENDERECO) VALUES (?,?,?,?,?,?)";
		PreparedStatement p = null;

		try {
			seguradora.setId_seguradora(getNextId("SEQ_SEGURADORAS", conn));

			p = conn.prepareStatement(sql);
			int cont = 1;

			p.setInt(cont++, seguradora.getId_seguradora());
			p.setString(cont++, seguradora.getRazao_social());
			p.setString(cont++, seguradora.getCnpj());
			p.setString(cont++, seguradora.getEmail());
			p.setString(cont++, seguradora.getTelefone());
			p.setInt(cont++, seguradora.getFk_id_endereco());

			p.executeUpdate();

		} catch (SQLException e) {

			throw new SegurosException(ESegurosErros.ERRO_INSERCAO);

		} finally {
			close(p);
		}
		return seguradora;
	}



	public List<Seguradora> list() throws SQLException, SegurosException {

		String sql = "SELECT * FROM SEGURADORAS";

		List<Seguradora> lista = null;
		PreparedStatement p = null;
		java.sql.ResultSet rs = null;

		try {
			lista = new ArrayList<Seguradora>();
			p = conn.prepareStatement(sql);
			rs = p.executeQuery();

			while (rs.next()) {

				Seguradora seguradora= new Seguradora();

				seguradora.setId_seguradora(rs.getInt("ID_SEGURADORA"));

				seguradora.setRazao_social(rs.getString("RAZAO_SOCIAL"));
				seguradora.setCnpj(rs.getString("CNPJ"));
				seguradora.setEmail(rs.getString("EMAIL"));
				seguradora.setTelefone(rs.getString("TELEFONE"));
				seguradora.setFk_id_endereco(rs.getInt("FK_ID_ENDERECO"));

				lista.add(seguradora);

			}
			if (lista.isEmpty()){
				throw new SegurosException(ESegurosErros.ERRO_ZERO_REGISTROS);
			} 

		} finally {
			close(rs);
			close(p);
		}

		return lista;
	}

	public Seguradora getSeguradora(int id_seguradora) throws SegurosException {

		String sql = "SELECT * FROM SEGURADORAS WHERE ID_SEGURADORA = ?";
		Seguradora seguradora = new Seguradora();
		PreparedStatement p = null;
		ResultSet rs = null;

		try {
			p = conn.prepareStatement(sql);
			p.setInt(1, id_seguradora);
			rs = p.executeQuery();

			while (rs.next()) {


				seguradora.setId_seguradora(rs.getInt("ID_SEGURADORA"));
				seguradora.setRazao_social(rs.getString("RAZAO_SOCIAL"));
				seguradora.setTelefone(rs.getString("TELEFONE"));
				seguradora.setEmail(rs.getString("EMAIL"));
				seguradora.setCnpj(rs.getString("CNPJ"));
				seguradora.setFk_id_endereco(rs.getInt("FK_ID_ENDERECO"));


			}
		} catch (SQLException e) {
			throw new SegurosException(ESegurosErros.ERRO_RECUPERAR_DADOS);

		} finally {
			close(p);
			close(rs);
		}
		return seguradora;
	}

	public void remove(int id_seguradora) throws SegurosException {

		String sql = "DELETE FROM SEGURADORAS WHERE ID_SEGURADORA= ?";

		PreparedStatement p = null;

		try {
			p = conn.prepareStatement(sql);
			p.setInt(1, id_seguradora);

			p.executeUpdate();

		} catch (SQLException e) {
			throw new SegurosException(ESegurosErros.ERRO_REMOVER_DADOS);

		} finally {
			close(p);
		}

	}
	
	public void update (Seguradora seguradora) throws SQLException {

		String sql = "UPDATE SEGURADORAS SET RAZAO_SOCIAL = ?, " +
				"TELEFONE = ?, " +
				"EMAIL = ?, " +
				"CNPJ = ?, " +
				"FK_ID_ENDERECO = ?" +
				" WHERE ID_SEGURADORA = ?";

		PreparedStatement p = null;
		
		try {
			p = conn.prepareStatement(sql);
			int cont = 1;
			p.setString(cont++, seguradora.getRazao_social());
			p.setString(cont++, seguradora.getTelefone());
			p.setString(cont++, seguradora.getEmail());
			p.setString(cont++, seguradora.getCnpj());
			p.setInt(cont++, seguradora.getFk_id_endereco());
			p.setInt(cont++, seguradora.getId_seguradora());

			p.executeUpdate();
			p.close();
			conn.close();

		} finally {
			close(p);
		}
	}

}

